home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvtools / examples / programs / playback.c < prev    next >
C/C++ Source or Header  |  1997-05-08  |  10KB  |  278 lines

  1. #ifndef    lint
  2. static char SccsId[]= "@(#)playback.c    V1.32    3/13/95";
  3. #endif
  4. /*
  5. |    file name - playback.c
  6. |===================================================================
  7. |
  8. |     This example works similarly to DVplay. It plays back a view
  9. |     created in DV-Draw. It continuously updates the view until the
  10. |     user selects the <q|Q> key or right mouse button.  The program
  11. |     will also exit if the user selects an object named "quit".
  12. |
  13. |===================================================================
  14. */
  15. #include <windows.h>
  16. /*
  17.  *  DV-Tools header files
  18.  */
  19. #include "std.h"                /* <stdio.h> etc., scalar & macro definitions */
  20. #include "dvstd.h"              /* public types & constants */
  21. #include "dvtools.h"            /* constants used by T routines */
  22. #include "dvGR.h"               /* constants used by window mgt & GR routines */
  23. #include "VOstd.h"              /* constants used by VO & VOob routines */
  24. #include "Tfundecl.h"           /* T routines (screens, drawports & views) */
  25. #include "VOfundecl.h"          /* VO routines (objects) */
  26. #include "VUerfundecl.h"        /* VUer routines (event handling routines) */
  27.  
  28. /* Constants */
  29. #define  DVPATH            (char *)NULL
  30. #define  DISPFORMS_STB     (char *)NULL
  31. #define  DVDEVICE          (char *)NULL
  32. #define  DVCOLORTABLE      (char *)NULL
  33. #define  VIEW_NAME         "play.v"
  34. #define  SCREEN_VIEWPORT   (RECTANGLE *)NULL
  35. #define  DRAWING_VIEWPORT  (RECTANGLE *)NULL
  36.  
  37. /*
  38.  *   MAIN PROGRAM
  39.  */
  40. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  41.                      LPSTR lpCmdLine,  int nCmdShow  )
  42. {
  43.   INT argc = 0;
  44.   CHAR **argv;
  45.  
  46.   /*
  47.    *  program arguments
  48.    *    argv[1] - display device name (default is to use DVDEVICE)
  49.    *    argv[2] - view name (default is play.v)
  50.    */
  51.  
  52.   /* Define & initialize device name and view filename */
  53.   char *device_name = DVDEVICE; /* default device name */
  54.   char *view_name = VIEW_NAME;  /* default view name */
  55.  
  56.   /* Define display variables */
  57.   OBJECT screen;            /* display device, the window */
  58.   DRAWPORT drawport;        /* how & where to display picture, picture frame */
  59.   VIEW view;                /* picture representation of the view file */
  60.  
  61.   /* Control loop variables */
  62.   OBJECT location;          /* the event representation */
  63.   int event_status;         /* the status of event requests */
  64.   char *obj_name;           /* name of selected graphical object */
  65.  
  66.   /* Other variables */
  67.   int Quit = NO;            /* flag to quit program */
  68.  
  69.  
  70.   /*--------------------
  71.    *   Initialization
  72.    *
  73.    *   TInit:  perform the initialization of DV-Tools
  74.    *           TInit reads your configuration file and any
  75.    *           environment variables or logical names set.
  76.    */
  77.   make_argv(&argc,&argv,GetCommandLine());
  78.   TInit( DVPATH, DISPFORMS_STB );
  79.  
  80.   /*
  81.    *   TscOpenSet: open a device as a screen object using
  82.    *               specified attributes
  83.    *   TscErase:   erase the entire screen in the default
  84.    *               background color
  85.    *
  86.    *   Set exposure block to YES to insure the window
  87.    *   is ready for drawing when TdpDraw is called.
  88.    */
  89.   if (argc > 1)
  90.     device_name = argv[1];
  91.   screen = TscOpenSet (device_name, DVCOLORTABLE,
  92.                        V_X_EXPOSURE_BLOCK, YES,
  93.                        V_ACTIVE_CURSOR, V_END_OF_LIST);
  94.   if (!screen)
  95.     {
  96.       printf ("Must specify device on command line or");
  97.       printf (" in DataViews configuration file.\n");
  98.       S_EXIT (EXIT_ERR);
  99.     }
  100.   TscErase (screen);
  101.  
  102.   /*
  103.    *   VOscWinEventMask:  sets the screen's window event mask
  104.    */
  105.   VOscWinEventMask ((ULONG) V_KEYPRESS | V_KEYRELEASE |
  106.                             V_BUTTONPRESS | V_BUTTONRELEASE | V_MOTIONNOTIFY,
  107.             (ULONG) 0);
  108.  
  109.   /*
  110.    *   TviLoad:   Load a view in from a file, either a
  111.    *              user supplied view or default view file play.v
  112.    *   TdpCreate: Create a DV-Tools window, a drawport.
  113.    *              The drawport is attached to the screen object
  114.    *              specified while view specifies the view to be
  115.    *              displayed on the screen.
  116.    */
  117.   if (argc == 3)
  118.     view_name = argv[2];
  119.   view = TviLoad (view_name);
  120.   if (!view)
  121.     {
  122.       printf ("Could not load view from file ");
  123.       printf ("%s.\n", view_name);
  124.       S_EXIT (EXIT_ERR);
  125.     }
  126.   drawport = TdpCreate (screen, view, SCREEN_VIEWPORT, DRAWING_VIEWPORT);
  127.  
  128.   /*
  129.    *   TviOpenData: Open all data source lists for this view and views
  130.    *                referenced by enabled subdrawings contained in view
  131.    *   TviReadData: Reads data from the data sources of a view
  132.    */
  133.   TviOpenData (view);
  134.   TviReadData (view);
  135.  
  136.   /*
  137.    *   TdpDraw:     Draw the contents of a drawport
  138.    */
  139.   TdpDraw (drawport);
  140.  
  141.  
  142.   /*--------------------
  143.    *   Control loop
  144.    *
  145.    *   Poll the event queue for window events specified by the
  146.    *   window mask.  Handle each of the events as they happen.
  147.    *   Events occurring within input objects will be handled
  148.    *   through the event request handler VUerHandleLocEvent.
  149.    *   Draw successive updates of the view after reading a data
  150.    *   iteration. Stop when the user selects "q|Q", the
  151.    *   right mouse button, or selects an object named "quit".
  152.    */
  153.   FOREVER
  154.   {
  155.     /*
  156.      * VOloWinEventPoll:   Poll for the next window event.
  157.      *                     The polling mode used is V_NO_WAIT.
  158.      *                     Using this mode, VOloWinEventPoll
  159.      *                     does not wait until a masked event
  160.      *                     is generated.
  161.      *
  162.      * VUerHandleLocEvent: Service the event. This routine will check
  163.      *                     if the event is used by any input objects
  164.      *                     that may be in the view.
  165.      */
  166.     location = VOloWinEventPoll (V_NO_WAIT);
  167.     if (location)
  168.       {
  169.         event_status = VUerHandleLocEvent (location);
  170.  
  171.         /*
  172.          * If the return value of VUerHandleLocEvent is INPUT_UNUSED
  173.          * then check for keypress or buttonpress events which
  174.          * represent one of the exit keys as well as checking if
  175.          * an object was selected which has a name of "quit".
  176.          */
  177.         if (event_status == INPUT_UNUSED)
  178.           {
  179.             /*
  180.              *  VOloType:  returns the type of event.  These types
  181.              *             match event types specified in VOscWinEventMask.
  182.              */
  183.             switch (VOloType (location))
  184.               {
  185.  
  186.               case V_KEYPRESS:
  187.                 /*
  188.                  *  Check key selected.
  189.                  *  VOloKeySym:  Returns the key symbol value of the
  190.                  *               location object
  191.                  *  TloGetSelectedObjectName: Get the name of the
  192.          *                  selected object
  193.                  *
  194.                  *  If the key symbol represents the characters 'q'
  195.                  *  or 'Q' then quit the program.
  196.                  *  Any ascii key acts as a possible selection key. A
  197.                  *  selected object with the name "quit" exits the program.
  198.                  */
  199.                 switch (VOloKeySym (location))
  200.                   {
  201.                   case 'q':
  202.                   case 'Q':
  203.                     Quit = YES;
  204.                     break;
  205.  
  206.                   default:
  207.                     if ((obj_name = TloGetSelectedObjectName (location)) &&
  208.                         (strcmp (obj_name, "quit") == 0))
  209.                       Quit = YES;
  210.                     break;
  211.                   }
  212.                 break;
  213.  
  214.               case V_BUTTONPRESS:
  215.                 /*
  216.                  *  Check button selected.
  217.                  *  VOloButton:  Returns the button that was pressed
  218.                  *  TloGetSelectedObjectName: Get the name of the
  219.          *                  selected object
  220.                  *
  221.                  *  The left mouse button acts as the selection button. A
  222.                  *  selected object with the name "quit" signifies the exit
  223.                  *  of the program. The right mouse button exits the program.
  224.                  */
  225.                 switch (VOloButton (location))
  226.                   {
  227.                   case 1:
  228.                     if ((obj_name = TloGetSelectedObjectName (location)) &&
  229.                         (strcmp (obj_name, "quit") == 0))
  230.                       Quit = YES;
  231.                     break;
  232.  
  233.                   case 3:
  234.                     Quit = YES;
  235.                     break;
  236.  
  237.                   default:
  238.                     break;
  239.                   }
  240.                 break;
  241.  
  242.               case V_MOTIONNOTIFY:
  243.               default:
  244.                 break;
  245.               }
  246.           }
  247.       }
  248.  
  249.     /* exit the program */
  250.     if (Quit == YES)
  251.       break;
  252.  
  253.     /*
  254.      *  TviReadData: Read data from the data sources of the view.
  255.      *  TdpDrawNext: Update all dynamic objects within a drawport's view
  256.      */
  257.     TviReadData (view);
  258.     TdpDrawNext (drawport);
  259.   }
  260.  
  261.  
  262.   /*--------------------
  263.    *   Termination
  264.    *
  265.    *   TdpDestroy:            Destroy the drawport,
  266.    *   TviCloseData:          Close the data sources of the view
  267.    *   TviDestroy:            Destroy the view, freeing the allocated memory
  268.    *   TscClose:           Closes the screen object
  269.    *   TTerminate:            Perform the clean-up for DV-Tools
  270.    */
  271.   TdpDestroy (drawport);
  272.   TviCloseData (view);
  273.   TviDestroy (view);
  274.   TscClose (screen);
  275.   TTerminate ();
  276.   return (EXIT_OK);
  277. }
  278.